home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / libs / intuisup.lha / Intuisup / source.lha / Editor / req.c < prev    next >
C/C++ Source or Header  |  1992-10-02  |  11KB  |  367 lines

  1. /* $Revision Header *** Header built automatically - do not edit! ***********
  2.  *
  3.  *    (C) Copyright 1991 by Torsten Jürgeleit
  4.  *
  5.  *    Name .....: req.c
  6.  *    Created ..: Sunday 22-Dec-91 21:23:00
  7.  *    Revision .: 0
  8.  *
  9.  *    Date        Author                 Comment
  10.  *    =========   ====================   ====================
  11.  *    22-Dec-91   Torsten Jürgeleit      Created this file!
  12.  *
  13.  ****************************************************************************
  14.  *
  15.  *    Requester part
  16.  *
  17.  * $Revision Header ********************************************************/
  18.  
  19.  /* Includes */
  20.  
  21. #include "includes.h"
  22. #include "defines.h"
  23. #include "imports.h"
  24. #include "protos.h"
  25.  
  26.  /* Defines for error requester */
  27.  
  28. #define ERROR_WINDOW_TITLE    " Error "
  29.  
  30.  /* Statics for error requester */
  31.  
  32. STATIC BYTE *error_text[]=
  33. {
  34.     "Can't open reqtools.library v38+",
  35.     "Can't open intuisup.library",
  36.     "Can't open window",
  37.     "Out of memory",
  38.     "Can't open file",
  39.     "Error while saving",
  40.     "Error while reading",
  41.     "Line in load file too long",
  42.     "Missing argument in load file",
  43.     "Different block types for BEGIN and END in load file",
  44.     "Invalid font"
  45. };
  46.  /* Defines for continue, ok/cancel requester */
  47.  
  48. #define AUTO_REQ_REQ_FLAGS    (AUTO_REQ_FLAG_BACK_FILL | AUTO_REQ_FLAG_TEXT_CENTER | AUTO_REQ_FLAG_TEXT_COLOR2 | AUTO_REQ_FLAG_HOTKEY | AUTO_REQ_FLAG_MOVE_POINTER_NEG)
  49.  
  50.  /* Defines for about requester */
  51.  
  52. #define ABOUT_REQ_WIDTH        304
  53. #define ABOUT_REQ_HEIGHT    126
  54. #define ABOUT_REQ_FLAGS        (REQ_DATA_FLAG_BACK_FILL | REQ_DATA_FLAG_CENTER_SCREEN | REQ_DATA_FLAG_INNER_WINDOW)
  55. #define ABOUT_REQ_TITLE        " About "
  56.  
  57. #define ABOUT_TEXT1_TYPE    TEXT_DATA_TYPE_TEXT
  58. #define ABOUT_TEXT1_FLAGS    (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_BOLD)
  59. #define ABOUT_TEXT1_LEFT_EDGE    0
  60. #define ABOUT_TEXT1_TOP_EDGE    (ABOUT_BORDER_TOP_EDGE + 7)
  61. #define ABOUT_TEXT1_TEXT    "Template Editor v1.1"
  62. #define ABOUT_TEXT1_TEXT_ATTR    &topaz60_attr
  63.  
  64. #define ABOUT_TEXT2_TYPE    TEXT_DATA_TYPE_TEXT
  65. #define ABOUT_TEXT2_FLAGS    (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_COLOR2)
  66. #define ABOUT_TEXT2_LEFT_EDGE    0
  67. #define ABOUT_TEXT2_TOP_EDGE    (ABOUT_TEXT1_TOP_EDGE + 15)
  68. #define ABOUT_TEXT2_TEXT    "© 01/92 by Torsten Jürgeleit    "
  69. #define ABOUT_TEXT2_TEXT_ATTR    &topaz80_attr
  70.  
  71. #define ABOUT_TEXT3_TYPE    TEXT_DATA_TYPE_TEXT
  72. #define ABOUT_TEXT3_FLAGS    (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_COLOR2)
  73. #define ABOUT_TEXT3_LEFT_EDGE    0
  74. #define ABOUT_TEXT3_TOP_EDGE    (ABOUT_TEXT2_TOP_EDGE + 10)
  75. #define ABOUT_TEXT3_TEXT    "           Am Sandberg 4        "
  76. #define ABOUT_TEXT3_TEXT_ATTR    &topaz80_attr
  77.  
  78. #define ABOUT_TEXT4_TYPE    TEXT_DATA_TYPE_TEXT
  79. #define ABOUT_TEXT4_FLAGS    (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_COLOR2)
  80. #define ABOUT_TEXT4_LEFT_EDGE    0
  81. #define ABOUT_TEXT4_TOP_EDGE    (ABOUT_TEXT3_TOP_EDGE + 10)
  82. #define ABOUT_TEXT4_TEXT    "           W-5270 Gummersbach   "
  83. #define ABOUT_TEXT4_TEXT_ATTR    &topaz80_attr
  84.  
  85. #define ABOUT_TEXT5_TYPE    TEXT_DATA_TYPE_TEXT
  86. #define ABOUT_TEXT5_FLAGS    (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_COLOR2)
  87. #define ABOUT_TEXT5_LEFT_EDGE    0
  88. #define ABOUT_TEXT5_TOP_EDGE    (ABOUT_TEXT4_TOP_EDGE + 10)
  89. #define ABOUT_TEXT5_TEXT    "           Germany              "
  90. #define ABOUT_TEXT5_TEXT_ATTR    &topaz80_attr
  91.  
  92. #define ABOUT_TEXT6_TYPE    TEXT_DATA_TYPE_TEXT
  93. #define ABOUT_TEXT6_FLAGS    (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_COLOR2)
  94. #define ABOUT_TEXT6_LEFT_EDGE    0
  95. #define ABOUT_TEXT6_TOP_EDGE    (ABOUT_TEXT5_TOP_EDGE + 10)
  96. #define ABOUT_TEXT6_TEXT    "           Phone ++49 2261 27400"
  97. #define ABOUT_TEXT6_TEXT_ATTR    &topaz80_attr
  98.  
  99. #define ABOUT_TEXT7_TYPE    TEXT_DATA_TYPE_TEXT
  100. #define ABOUT_TEXT7_FLAGS    (TEXT_DATA_FLAG_CENTER)
  101. #define ABOUT_TEXT7_LEFT_EDGE    0
  102. #define ABOUT_TEXT7_TOP_EDGE    (ABOUT_TEXT6_TOP_EDGE + 10)
  103. #define ABOUT_TEXT7_TEXT    " Thanks to Michael Bjerking     "
  104. #define ABOUT_TEXT7_TEXT_ATTR    &topaz80_attr
  105.  
  106. #define ABOUT_TEXT8_TYPE    TEXT_DATA_TYPE_TEXT
  107. #define ABOUT_TEXT8_FLAGS    (TEXT_DATA_FLAG_CENTER)
  108. #define ABOUT_TEXT8_LEFT_EDGE    0
  109. #define ABOUT_TEXT8_TOP_EDGE    (ABOUT_TEXT7_TOP_EDGE + 10)
  110. #define ABOUT_TEXT8_TEXT    " - for this new release.        "
  111. #define ABOUT_TEXT8_TEXT_ATTR    &topaz80_attr
  112.  
  113. #define ABOUT_BORDER_TYPE    BORDER_DATA_TYPE_BOX2_OUT
  114. #define ABOUT_BORDER_LEFT_EDGE    10
  115. #define ABOUT_BORDER_TOP_EDGE    5
  116. #define ABOUT_BORDER_WIDTH    (ABOUT_REQ_WIDTH - 2 * ABOUT_BORDER_LEFT_EDGE)
  117. #define ABOUT_BORDER_HEIGHT    (ABOUT_REQ_HEIGHT - (3 * ABOUT_BORDER_TOP_EDGE + ABOUT_GADGET_HEIGHT))
  118.  
  119. #define ABOUT_GADGET_TYPE    GADGET_DATA_TYPE_BUTTON
  120. #define ABOUT_GADGET_FLAGS    (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_MOVE_POINTER)
  121. #define ABOUT_GADGET_TEXT    "_Continue"
  122. #define ABOUT_GADGET_LEFT_EDGE    ((ABOUT_REQ_WIDTH - ABOUT_GADGET_WIDTH) / 2)
  123. #define ABOUT_GADGET_TOP_EDGE    (ABOUT_REQ_HEIGHT - ABOUT_GADGET_HEIGHT - 5)
  124. #define ABOUT_GADGET_WIDTH    ((8 + 2) * 8)
  125. #define ABOUT_GADGET_HEIGHT    15
  126. #define ABOUT_GADGET_TEXT_ATTR    &topaz80_attr
  127.  
  128.  /* Statics for about requester */
  129.  
  130. STATIC struct TextData about_text_data[]=
  131. {
  132.     {
  133.         ABOUT_TEXT1_TYPE,        /* td_Type */
  134.         ABOUT_TEXT1_FLAGS,        /* td_Flags */
  135.         ABOUT_TEXT1_LEFT_EDGE,    /* td_LeftEdge */
  136.         ABOUT_TEXT1_TOP_EDGE,    /* td_TopEdge */
  137.         ABOUT_TEXT1_TEXT,        /* *td_Text */
  138.         ABOUT_TEXT1_TEXT_ATTR    /* *td_TextAttr */
  139.     },
  140.     {
  141.         ABOUT_TEXT2_TYPE,        /* td_Type */
  142.         ABOUT_TEXT2_FLAGS,        /* td_Flags */
  143.         ABOUT_TEXT2_LEFT_EDGE,    /* td_LeftEdge */
  144.         ABOUT_TEXT2_TOP_EDGE,    /* td_TopEdge */
  145.         ABOUT_TEXT2_TEXT,        /* *td_Text */
  146.         ABOUT_TEXT2_TEXT_ATTR    /* *td_TextAttr */
  147.     },
  148.     {
  149.         ABOUT_TEXT3_TYPE,        /* td_Type */
  150.         ABOUT_TEXT3_FLAGS,        /* td_Flags */
  151.         ABOUT_TEXT3_LEFT_EDGE,    /* td_LeftEdge */
  152.         ABOUT_TEXT3_TOP_EDGE,    /* td_TopEdge */
  153.         ABOUT_TEXT3_TEXT,        /* *td_Text */
  154.         ABOUT_TEXT3_TEXT_ATTR    /* *td_TextAttr */
  155.     },
  156.     {
  157.         ABOUT_TEXT4_TYPE,        /* td_Type */
  158.         ABOUT_TEXT4_FLAGS,        /* td_Flags */
  159.         ABOUT_TEXT4_LEFT_EDGE,    /* td_LeftEdge */
  160.         ABOUT_TEXT4_TOP_EDGE,    /* td_TopEdge */
  161.         ABOUT_TEXT4_TEXT,        /* *td_Text */
  162.         ABOUT_TEXT4_TEXT_ATTR    /* *td_TextAttr */
  163.     },
  164.     {
  165.         ABOUT_TEXT5_TYPE,        /* td_Type */
  166.         ABOUT_TEXT5_FLAGS,        /* td_Flags */
  167.         ABOUT_TEXT5_LEFT_EDGE,    /* td_LeftEdge */
  168.         ABOUT_TEXT5_TOP_EDGE,    /* td_TopEdge */
  169.         ABOUT_TEXT5_TEXT,        /* *td_Text */
  170.         ABOUT_TEXT5_TEXT_ATTR    /* *td_TextAttr */
  171.     },
  172.     {
  173.         ABOUT_TEXT6_TYPE,        /* td_Type */
  174.         ABOUT_TEXT6_FLAGS,        /* td_Flags */
  175.         ABOUT_TEXT6_LEFT_EDGE,    /* td_LeftEdge */
  176.         ABOUT_TEXT6_TOP_EDGE,    /* td_TopEdge */
  177.         ABOUT_TEXT6_TEXT,        /* *td_Text */
  178.         ABOUT_TEXT6_TEXT_ATTR    /* *td_TextAttr */
  179.     },
  180.     {
  181.         ABOUT_TEXT7_TYPE,        /* td_Type */
  182.         ABOUT_TEXT7_FLAGS,        /* td_Flags */
  183.         ABOUT_TEXT7_LEFT_EDGE,    /* td_LeftEdge */
  184.         ABOUT_TEXT7_TOP_EDGE,    /* td_TopEdge */
  185.         ABOUT_TEXT7_TEXT,        /* *td_Text */
  186.         ABOUT_TEXT7_TEXT_ATTR    /* *td_TextAttr */
  187.     },
  188.     {
  189.         ABOUT_TEXT8_TYPE,        /* td_Type */
  190.         ABOUT_TEXT8_FLAGS,        /* td_Flags */
  191.         ABOUT_TEXT8_LEFT_EDGE,    /* td_LeftEdge */
  192.         ABOUT_TEXT8_TOP_EDGE,    /* td_TopEdge */
  193.         ABOUT_TEXT8_TEXT,        /* *td_Text */
  194.         ABOUT_TEXT8_TEXT_ATTR    /* *td_TextAttr */
  195.     },
  196.     {
  197.         INTUISUP_DATA_END        /* mark end of text data array */
  198.     }
  199. };
  200. STATIC struct BorderData about_border_data[]=
  201. {
  202.     {
  203.         ABOUT_BORDER_TYPE,        /* bd_Type */
  204.         ABOUT_BORDER_LEFT_EDGE,    /* bd_LeftEdge */
  205.         ABOUT_BORDER_TOP_EDGE,    /* bd_TopEdge */
  206.         ABOUT_BORDER_WIDTH,        /* bd_Width */
  207.         ABOUT_BORDER_HEIGHT        /* bd_Height */
  208.     },
  209.     {
  210.         INTUISUP_DATA_END        /* mark end of border data array */
  211.     }
  212. };
  213. STATIC struct GadgetData about_gadget_data[]=
  214. {
  215.     {
  216.         ABOUT_GADGET_TYPE,        /* gd_Type */
  217.         ABOUT_GADGET_FLAGS,        /* gd_Flags */
  218.         ABOUT_GADGET_LEFT_EDGE,    /* gd_LeftEdge */
  219.         ABOUT_GADGET_TOP_EDGE,    /* gd_TopEdge */
  220.         ABOUT_GADGET_WIDTH,        /* gd_Width */
  221.         ABOUT_GADGET_HEIGHT,    /* gd_Height */
  222.         ABOUT_GADGET_TEXT,        /* *gd_Text */
  223.         ABOUT_GADGET_TEXT_ATTR,    /* *gd_TextAttr */
  224.         {0, 0, 0}
  225.     },
  226.     {
  227.         INTUISUP_DATA_END        /* mark end of gadget data */
  228.     }
  229. };
  230. STATIC struct RequesterData about_requester_data =
  231. {
  232.     0,                            /* rd_LeftEdge */
  233.     0,                            /* rd_TopEdge */
  234.     ABOUT_REQ_WIDTH,            /* rd_Width */
  235.     ABOUT_REQ_HEIGHT,            /* rd_Height */
  236.     ABOUT_REQ_FLAGS,            /* rd_Flags */
  237.     ABOUT_REQ_TITLE,            /* *rd_Title */
  238.     &about_text_data[0],        /* *rd_Texts */
  239.     &about_border_data[0],        /* *rd_Borders */
  240.     &about_gadget_data[0]        /* *rd_Gadgets */
  241. };
  242.  /* Show error message as continue requester */
  243.  
  244. VOID
  245. show_error(SHORT status)
  246. {
  247.     BYTE *error;
  248.  
  249.     if (status < EDITOR_STATUS_NORMAL)
  250.     {
  251.         error = error_text[-(status + 1)];
  252.         if (IntuiSupBase)
  253.         {
  254.             continue_requester(ERROR_WINDOW_TITLE, error);
  255.         }
  256.         else
  257.         {
  258.             if (IntuitionBase)
  259.             {
  260.                 intuition_error_requester(error);
  261.             }
  262.         }
  263.     }
  264. }
  265.  
  266.  /* Show IntuiSup continue requester */
  267.  
  268. VOID
  269. continue_requester(BYTE * title, BYTE * text)
  270. {
  271.     IAutoRequest(ewin, title, text, "_Continue", NULL, 0L, 0L,
  272.                  AUTO_REQ_REQ_FLAGS, NULL);
  273. }
  274.  
  275.  /* Show Intuition error requester */
  276.  
  277. STATIC VOID
  278. intuition_error_requester(BYTE * text)
  279. {
  280.     struct Screen screen, *scr = &screen;
  281.     struct IntuiText itext_error, itext_ok;
  282.     USHORT border_left, border_top, width, height, max_width;
  283.  
  284.     /* Get screen dimension */
  285.     GetScreenData((BYTE *) scr, (LONG) sizeof(struct Screen),
  286.                    (LONG) WBENCHSCREEN, (LONG) NULL);
  287.     border_left = scr->BarHeight - scr->BarVBorder + scr->WBorTop;
  288.     border_top = scr->WBorTop;
  289.  
  290.     /* Init message text */
  291.     itext_error.LeftEdge = border_left;
  292.     itext_error.TopEdge = border_top + 4;
  293.     itext_error.DrawMode = JAM1;
  294.     itext_error.FrontPen = 2;
  295.     itext_error.IText = (UBYTE *) text;
  296.     itext_error.ITextFont = &topaz80_attr;
  297.     itext_error.NextText = NULL;
  298.     max_width = IntuiTextLength(&itext_error);
  299.  
  300.     /* Init ok text */
  301.     itext_ok.LeftEdge = 6;
  302.     itext_ok.TopEdge = 4;
  303.     itext_ok.DrawMode = JAM1;
  304.     itext_ok.FrontPen = 3;
  305.     itext_ok.ITextFont = &topaz60_attr;
  306.     itext_ok.IText = (UBYTE *) "Ok";
  307.     itext_ok.NextText = NULL;
  308.     if ((width = IntuiTextLength(&itext_ok) + 2 * 16) * 2 > max_width)
  309.     {
  310.         max_width = width;
  311.     }
  312.  
  313.     /* Calc requester dimension and scale it if neccessary */
  314.     width = max_width + border_left + scr->WBorRight + 2 * 16;
  315.     if (width > scr->Width)
  316.     {
  317.         width = scr->Width;
  318.     }
  319.     height = border_top + scr->WBorBottom + 8 + 10 + 9 + 2 * 8 + 2 * 4;
  320.     if (height > scr->Height)
  321.     {
  322.         height = scr->Height;
  323.     }
  324.     AutoRequest((LONG) NULL, &itext_error, &itext_ok, &itext_ok, 0L, 0L,
  325.                 (LONG) width, (LONG) height);
  326. }
  327.  
  328.  /* Show about requester */
  329.  
  330. VOID
  331. about_requester(VOID)
  332. {
  333.     APTR rl;
  334.  
  335.     if (rl = IDisplayRequester(ewin, &about_requester_data, NULL))
  336.     {
  337.         struct MsgPort *up = ewin->UserPort;
  338.         BOOL keepon = TRUE;
  339.  
  340.         do
  341.         {
  342.             struct IntuiMessage *msg;
  343.  
  344.             WaitPort(up);
  345.             while (msg = IGetMsg(up))
  346.             {
  347.                 if (msg->Class == ISUP_ID)
  348.                 {
  349.                     keepon = FALSE;
  350.                 }
  351.                 IReplyMsg(msg);
  352.             }
  353.         }
  354.         while (keepon == TRUE);
  355.         IRemoveRequester(rl);
  356.     }
  357. }
  358.  
  359.  /* Show IntuiSup ok/cancel requester */
  360.  
  361. BOOL
  362. ok_cancel_requester(BYTE * title, BYTE * text)
  363. {
  364.     return (IAutoRequest(ewin, title, text, "_Ok", "_Cancel", 0L, 0L,
  365.                          AUTO_REQ_REQ_FLAGS, NULL));
  366. }
  367.